package com.fishingwithme.domain.common;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;


/**
 * 评论服务接口
 */
public interface UserCommentService extends IService<UserComment> {

    /**
     * 添加评论
     *
     * @param comment 评论信息
     * @return 新增的评论
     */
    UserComment addComment(UserComment comment);

    /**
     * 删除评论
     *
     * @param commentId 评论ID
     * @param userId    用户ID（用于权限校验）
     * @return 是否删除成功
     */
    boolean deleteComment(Long commentId, Long userId);

    /**
     * 更新评论内容
     *
     * @param commentId 评论ID
     * @param userId    用户ID（用于权限校验）
     * @param content   新的评论内容
     * @return 是否更新成功
     */
    boolean updateCommentContent(Long commentId, Long userId, String content);

    /**
     * 分页查询目标内容的顶级评论
     *
     * @param targetType 目标类型
     * @param targetId   目标ID
     * @param pageNum    页码
     * @param pageSize   每页条数
     * @return 分页评论列表
     */
    IPage<UserComment> getTopLevelComments(String targetType, Long targetId, int pageNum, int pageSize);

    /**
     * 获取带层级结构的评论列表（盖楼效果）
     *
     * @param targetType 目标类型
     * @param targetId   目标ID
     * @param pageNum    页码
     * @param pageSize   每页条数
     * @return 带层级的评论分页列表
     */
    IPage<UserComment> getCommentsWithHierarchy(String targetType, Long targetId, int pageNum, int pageSize);


    IPage<UserComment> getChildCommentsByPage(Long parentId, int pageNum, int pageSize);

    /**
     * 根据ID查询评论详情
     *
     * @param commentId 评论ID
     * @return 评论详情
     */
    UserComment getCommentById(Long commentId);

    /**
     * 分页查询用户发布的评论
     *
     * @param userId   用户ID
     * @param pageNum  页码
     * @param pageSize 每页条数
     * @return 评论分页列表
     */
    IPage<UserComment> getUserComments(Long userId, int pageNum, int pageSize);

    /**
     * 评论点赞
     *
     * @param commentId 评论ID
     * @return 点赞后的点赞数
     */
    Boolean likeComment(Long commentId);

    /**
     * 取消评论点赞
     *
     * @param commentId 评论ID
     * @return 取消后的点赞数
     */
    Boolean unlikeComment(Long commentId);
}
